package models

import "gorm.io/gorm"

// Submit 提交记录模型结构
type Submit struct {
	// Base 嵌入基础模型，包含通用字段
	Base

	Identity string `gorm:"column:identity;type:varchar(36);" json:"identity"` // Identity 提交记录的唯一标识，使用varchar(36)类型存储

	ProblemIdentity string   `gorm:"column:problem_identity;type:varchar(36);" json:"problem_identity"` // ProblemIdentity 关联的问题唯一标识，使用varchar(36)类型存储
	Problem         *Problem `gorm:"foreignKey:identity;references:problem_identity"`                   // 关联问题基础表

	UserIdentity string `gorm:"column:user_identity;type:varchar(36);" json:"user_identity"` // UserIdentity 提交用户的唯一标识，使用varchar(36)类型存储
	User         *User  `gorm:"foreignKey:identity;references:user_identity"`                // 关联用户基础表
	Path         string `gorm:"column:path;type:varchar(255);" json:"path"`                  // Path 用户提交的代码文件存放路径，使用varchar(255)类型存储
	Status       int    `gorm:"column:status;type:tinyint(1);" json:"status"`                // 【-1-待判断，1-答案正确，2-答案错误，3-运行超时，4-运行超内存】
}

// TableName 指定模型对应的数据库表名
func (table *Submit) TableName() string {
	// 返回数据库表名
	return "submit"
}

// GetSubmitList 获取提交记录列表
func GetSubmitList(problemIdentity, userIdentity string, status int) *gorm.DB {
	// 构建查询：关联问题表和用户表，并排除问题内容字段
	tx := DB.Model(&Submit{}).Preload("Problem", func(db *gorm.DB) *gorm.DB {
		return db.Omit("content") // 预加载Problem关联时，排除content字段（不查询问题内容）
	}).Preload("User") // 预加载User关联（用户信息）

	// 如果问题标识不为空，添加问题筛选条件
	if problemIdentity != "" {
		tx.Where("problem_identity = ?", problemIdentity)
	}

	// 如果用户标识不为空，添加用户筛选条件
	if userIdentity != "" {
		tx.Where("user_identity = ?", userIdentity)
	}

	// 如果状态不为0，添加状态筛选条件
	if status != 0 {
		tx.Where("status = ?", status)
	}

	return tx
}
